home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.2)
-
- """
- /***************************************************************************
-
- \tAuthor \t\t\t:Charles B. Cosse
- \t
- \tEmail\t\t\t:ccosse@asymptopia.com
- \t\t\t\t\t
- \t\t\t\t\t
- \tCopyright\t\t:(C) 2002,2003 Asymptopia Software.
- \t
- ***************************************************************************/
- /***************************************************************************
- Tux.py
-
- \tDescription: The Tux object generates & submits Tux's options.
-
- ***************************************************************************/
-
- /***************************************************************************
- * *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. (Please note that if you use this *
- * code you must give credit by including the Author and Copyright *
- * info at the top of this file). *
- ***************************************************************************/
- """
- import os
- import pygame
- from pygame.locals import *
- from random import random
- from Board import *
- from Spot import *
- from myutil import *
- from Tile import *
- from Button import *
- from Validator import *
- from Player import Player
-
- class Tux(Player):
- '''Tux derives from asymptopia.Player
- \tWe could have called it "penguin manager"
- \tor "Dealer", as in v.01.
- \tTux just get instantiated with a ptr->TuxMathScrabble, itself.
- \t
- \tNeed to add/take-off from submissionspots from here.
- \tWant to parallel same interface as player does, but can\'t use same
- \tactual lines of code, since Tux knows what he\'s doing and the board
- \thas yet to validate Tux\'s submission.
- \t
- \tTux takes care of his own tray.
- \tHe uses same "draw_tiles" func that gets called from play() after
- \twin sound, upon successful validation and subsequent guest-exchange between
- \tlayers (submission vs board).
- \t'''
-
- def __init__(self, game):
- Player.__init__(self)
- self.game = game
- self.tray = game.tuxtray
- self.LEVEL = game.LEVEL
- self.current_submission_idx = None
- self.triplets = None
- self.doublets = None
- self.singlets = None
- self.operator_doublets = None
- self.operator_singlets = None
- self.triplet_expressions = None
- self.doublet_expressions = None
- self.singlet_expressions = None
- self.wc_doublet_expressions = None
- self.wc_singlet_expressions = None
-
-
- def getStringValues(self):
- str_values = []
- spots = self.tray.get_spots()
- nnumbers = self.game.NNUMBERS
- newspots = []
- for spotidx in range(nnumbers):
- newspots.append(0)
-
- ntrayspots = self.game.NTRAYSPOTS
- while len(spots) > ntrayspots - nnumbers:
- for spot in spots:
- if spot.getMN()[1] < nnumbers:
- newspots[spot.getMN()[1]] = spot
- spots.remove(spot)
-
-
- for dummy in range(len(newspots)):
- str_values.append(newspots[dummy].guest.str_val)
-
- return str_values
-
-
- def getAllStringValues(self):
- str_values = []
- spots = self.tray.get_spots()
- ntrayspots = self.game.NTRAYSPOTS
- newspots = []
- for spotidx in range(ntrayspots):
- newspots.append(0)
-
- while len(spots) > 0:
- for spot in spots:
- newspots[spot.getMN()[1]] = spot
- spots.remove(spot)
-
- for dummy in range(len(newspots)):
- str_values.append(newspots[dummy].guest.str_val)
-
- return str_values
-
-
- def cycle_vals(self, vals):
- tmp = vals.pop()
- vals.insert(int(random() * len(vals)), tmp)
- return vals
-
-
- def get3x2x1x(self, N):
- plets = []
- num_times_cycled = 0
- str_vals = self.getStringValues()
- NumNumbers = 6
- while num_times_cycled < 1000:
- for idx in range(0, NumNumbers - N):
- i_plet = []
- s_plet = []
- for jdx in range(N):
- i_plet.append(float(str_vals[idx + jdx]))
-
- i_plet.sort()
- for jdx in range(N):
- s_plet.append(`i_plet[jdx]`)
-
- if plets.count(s_plet) == 0:
- plets.append(s_plet)
- elif N == 1 and plets.count(s_plet) < str_vals.count(s_plet[0]):
- plets.append(s_plet)
-
-
- str_vals = self.cycle_vals(str_vals)
- num_times_cycled = num_times_cycled + 1
- return plets
-
-
- def evaluate(self, expr):
- str = ''
- for idx in range(len(expr)):
- str = str + expr[idx]
-
-
- try:
- val = eval(str)
- except:
- return 0
-
- return val
-
-
- def get3xPermutations(self, tripplet):
- p = [
- [
- 1,
- 2,
- 3],
- [
- 1,
- 3,
- 2],
- [
- 2,
- 1,
- 3],
- [
- 2,
- 3,
- 1],
- [
- 3,
- 1,
- 2],
- [
- 3,
- 2,
- 1]]
- px3 = []
- for pidx in range(len(p)):
- tx3 = []
- for tidx in range(3):
- tx3.append(tripplet[p[pidx][tidx] - 1])
-
- if px3.count(tx3) == 0:
- px3.append(tx3)
-
-
- return px3
-
-
- def get2xPermutations(self, doublet):
- p = [
- [
- 1,
- 2],
- [
- 2,
- 1]]
- px2 = []
- for pidx in range(len(p)):
- dx2 = []
- for tidx in range(2):
- dx2.append(doublet[p[pidx][tidx] - 1])
-
- if px2.count(dx2) == 0:
- px2.append(dx2)
-
-
- return px2
-
-
- def get_operator_plets(self, N):
- if N == 1:
- plets = [
- [
- '+'],
- [
- '-'],
- [
- '*'],
- [
- '/']]
- elif N == 2 and self.LEVEL <= 4:
- plets = [
- [
- '+',
- '+'],
- [
- '+',
- '-'],
- [
- '-',
- '+'],
- [
- '-',
- '-'],
- [
- '*',
- '*'],
- [
- '*',
- '/'],
- [
- '/',
- '*'],
- [
- '/',
- '/'],
- [
- '*',
- '-'],
- [
- '-',
- '*'],
- [
- '*',
- '+'],
- [
- '+',
- '*'],
- [
- '/',
- '-'],
- [
- '-',
- '/'],
- [
- '/',
- '+'],
- [
- '+',
- '/']]
- elif N == 2 and self.LEVEL < 3:
- plets = [
- [
- '+',
- '+'],
- [
- '+',
- '-'],
- [
- '-',
- '+'],
- [
- '-',
- '-']]
-
- return plets
-
-
- def generate_expressions(self):
- triplets = self.get3x2x1x(3)
- doublets = self.get3x2x1x(2)
- singlets = self.get3x2x1x(1)
- operator_doublets = self.get_operator_plets(2)
- operator_singlets = self.get_operator_plets(1)
- current_submission_idx = 0
- triplet_expressions = []
- for pdx in range(0, len(triplets)):
- permutations = self.get3xPermutations(triplets[pdx])
- for perm in permutations:
- for odx in range(len(operator_doublets)):
- expr = [
- perm[0],
- operator_doublets[odx][0],
- perm[1],
- operator_doublets[odx][1],
- perm[2]]
- value = self.evaluate(expr)
- triplet_expressions.append([
- pdx,
- odx,
- expr,
- value])
-
-
-
- doublet_expressions = []
- for pdx in range(0, len(doublets)):
- permutations = self.get2xPermutations(doublets[pdx])
- for perm in permutations:
- for odx in range(len(operator_singlets)):
- expr = [
- perm[0],
- operator_singlets[odx][0],
- perm[1]]
- value = self.evaluate(expr)
- doublet_expressions.append([
- pdx,
- odx,
- expr,
- value])
-
-
-
- wc_doublet_expressions = []
- for pdx in range(0, len(singlets)):
- for odx in range(len(operator_singlets)):
- for val in range(21):
- expr = [
- `val` + '.0',
- operator_singlets[odx][0],
- singlets[pdx][0]]
- value = self.evaluate(expr)
- expr = [
- 'WC:' + `val` + '.0',
- operator_singlets[odx][0],
- singlets[pdx][0]]
- wc_doublet_expressions.append([
- pdx,
- odx,
- expr,
- value])
-
-
-
- for pdx in range(0, len(singlets)):
- for odx in range(len(operator_singlets)):
- for val in range(21):
- expr = [
- singlets[pdx][0],
- operator_singlets[odx][0],
- `val` + '.0']
- value = self.evaluate(expr)
- expr = [
- singlets[pdx][0],
- operator_singlets[odx][0],
- 'WC:' + `val` + '.0']
- wc_doublet_expressions.append([
- pdx,
- odx,
- expr,
- value])
-
-
-
- for pdx in range(0, len(doublets)):
- permutations = self.get2xPermutations(doublets[pdx])
- for perm in permutations:
- for odx in range(len(operator_singlets)):
- expr = [
- perm[0],
- operator_singlets[odx][0],
- perm[1]]
- value = self.evaluate(expr)
- expr = [
- perm[0],
- 'WC:' + operator_singlets[odx][0],
- perm[1]]
- wc_doublet_expressions.append([
- pdx,
- odx,
- expr,
- value])
-
-
-
- wc_wc_doublet_expressions = []
- for v1 in range(21):
- for v2 in range(21):
- for odx in range(len(operator_singlets)):
- expr = [
- `v1` + '.0',
- operator_singlets[odx][0],
- `v2` + '.0']
- value = self.evaluate(expr)
- expr = [
- 'WC:' + `v1` + '.0',
- operator_singlets[odx][0],
- 'WC:' + `v2` + '.0']
- wc_wc_doublet_expressions.append([
- 0,
- odx,
- expr,
- value])
-
-
-
- singlet_expressions = []
- for pdx in range(0, len(singlets)):
- expr = [
- singlets[pdx][0]]
- value = self.evaluate(expr[0])
- singlet_expressions.append([
- pdx,
- None,
- expr,
- value])
-
- wc_singlet_expressions = []
- for pdx in range(0, 21):
- expr = [
- 'WC:' + `pdx` + '.0']
- value = pdx
- wc_singlet_expressions.append([
- pdx,
- None,
- expr,
- value])
-
- self.triplet_expressions = triplet_expressions
- self.doublet_expressions = doublet_expressions
- self.singlet_expressions = singlet_expressions
- self.wc_doublet_expressions = wc_doublet_expressions
- self.wc_wc_doublet_expressions = wc_wc_doublet_expressions
- self.wc_singlet_expressions = wc_singlet_expressions
- self.game.do_one_scratch()
-
-
- def construct_submission(self, lhs_expressions, rhs_expressions):
- stringValues = self.getAllStringValues()
- self.game.do_one_scratch()
- for idx1 in range(len(lhs_expressions)):
- for idx2 in range(len(rhs_expressions)):
- if lhs_expressions[idx1][3] == rhs_expressions[idx2][3]:
- combinedList = []
- for idx in range(len(lhs_expressions[idx1][2])):
- combinedList.append(lhs_expressions[idx1][2][idx])
-
- combinedList.append('=')
- for idx in range(len(rhs_expressions[idx2][2])):
- combinedList.append(rhs_expressions[idx2][2][idx])
-
- ok = 1
- for elem in combinedList:
- count = combinedList.count(elem)
- if elem.count('WC:'):
- pass
- elif stringValues.count(elem) < count:
- ok = 0
-
-
- if ok == 1:
- rlist = self.game.localizer.localize(combinedList)
- if rlist:
- return rlist
-
-
-
-
-
- return None
-
-
- def generate_options(self):
- triplet_expressions = self.triplet_expressions
- doublet_expressions = self.doublet_expressions
- singlet_expressions = self.singlet_expressions
- wc_doublet_expressions = self.wc_doublet_expressions
- wc_wc_doublet_expressions = self.wc_wc_doublet_expressions
- wc_singlet_expressions = self.wc_singlet_expressions
- operator_doublets = self.operator_doublets
- operator_singlets = self.operator_singlets
- LEVEL = self.LEVEL
- self.options = []
- tray = self.tray
- spots = self.tray.get_spots()
- self.game.localizer.update_board_map()
- num_commited = self.game.board.get_num_commited()
- if num_commited > 3 and LEVEL > 1:
- rlist = self.construct_submission(triplet_expressions, wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_doublet_expressions, triplet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(triplet_expressions, wc_singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_singlet_expressions, triplet_expressions)
- if rlist:
- return rlist
-
-
- if num_commited > 3:
- rlist = self.construct_submission(doublet_expressions, wc_wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_wc_doublet_expressions, doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_wc_doublet_expressions, singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(singlet_expressions, wc_wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_doublet_expressions, wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(doublet_expressions, wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_doublet_expressions, doublet_expressions)
- if rlist:
- return rlist
-
-
- rlist = self.construct_submission(wc_singlet_expressions, wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_doublet_expressions, wc_singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(doublet_expressions, wc_singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_singlet_expressions, doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(singlet_expressions, wc_doublet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_doublet_expressions, singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(wc_singlet_expressions, singlet_expressions)
- if rlist:
- return rlist
-
- rlist = self.construct_submission(singlet_expressions, wc_singlet_expressions)
- if rlist:
- return rlist
- else:
- return None
-
-
-